package com.dexter.year2023.charpter3_array.level1.topic1_2单调数组;

/**
 * LeetCode 896. 单调数列
 * https://leetcode.cn/problems/monotonic-array/
 * <p>
 * 如果数组是单调递增或单调递减的，那么它是 单调 的。
 * 如果对于所有 i <= j，nums[i] <= nums[j]，那么数组 nums 是单调递增的。 如果对于所有 i <= j，nums[i]> = nums[j]，那么数组 nums 是单调递减的。
 * 当给定的数组 nums 是单调数组时返回 true，否则返回 false。
 * <p>
 * 示例 1：
 * 输入：nums = [1,2,2,3]
 * 输出：true
 * 示例 2：
 * 输入：nums = [6,5,4,4]
 * 输出：true
 * 示例 3：
 * 输入：nums = [1,3,2]
 * 输出：false
 * <p>
 * 提示：
 * 1 <= nums.length <= 105
 * -105 <= nums[i] <= 105
 *
 * @author Dexter
 */
public class IsMonotonic {
    public static void main(String[] args) {
        int[] a = {6, 5, 4, 4};
        System.out.println("是否为单调序列：" + (isMonotonic(a) ? "是" : "否"));
    }

    /**
     * 判断数组是否单调，定义两个判断标志，一次遍历实现（最优写法）
     * <p>
     * 不推荐：使用 return isSorted(nums, true) || isSorted(nums, false); 分别进行递增和递减的判断
     *
     * @param nums
     * @return
     */
    public static boolean isMonotonic(int[] nums) {
        boolean inc = true, dec = true;
        for (int i = 0; i < nums.length - 1; i++) {
            // 递增的异常
            if (nums[i] > nums[i + 1]) {
                inc = false;
            }
            // 递减的异常
            if (nums[i] < nums[i + 1]) {
                dec = false;
            }
        }
        return dec || inc;
    }
}
